package com.twj.tools.parse;


import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;

import static com.twj.tools.parse.DateUtils.convertCalendarToDate;
import static com.twj.tools.parse.DateUtils.dateToString;

public class CastUtils {

    /**
     * @param obj 对象
     * @return String
     * @name 转型成String
     * @description 缺省未列举的对象类型会 默认toString()，不排除特定类型转型出来的未知串， 请注意，慎用
     * @time 创建时间:2014-7-10下午10:49:00
     * @author 邓文辉
     * @history 修订历史（历次修订内容、修订人、修订时间等）
     */
    public static String cast2Str(Object obj) {
        String returnVal = null;
        if (obj != null) {
            if (obj instanceof String) {
                returnVal = (String) obj;
            } else if (obj instanceof BigDecimal || obj instanceof Integer || obj instanceof Long) {
                returnVal = obj.toString();
            }
            //先转成BigDecimal，再转成String，可以避免 转型出现 3.0E-4 这样的科学计数法字符串
            else if (obj instanceof Double) {
                final BigDecimal dec = new BigDecimal(obj.toString());
                returnVal = dec.toPlainString();//把科学计数法格式成正常格式
            } else if (obj instanceof Date) {
                final Date da = (Date) obj;
                returnVal = dateToString(da);
            } else if (obj instanceof Calendar) {
                final Calendar ca = (Calendar) obj;
                returnVal = dateToString(convertCalendarToDate(ca));
            } else if (obj instanceof Boolean) {
                final Boolean objBooleanValue = (Boolean) obj;
                if (objBooleanValue) {
                    returnVal = "Y";
                } else if (!objBooleanValue) {
                    returnVal = "N";
                }
            }
            //默认toString，需注意某些特定类型的转型
            else {
                returnVal = obj.toString();
            }
        }
        return returnVal;
    }

    /**
     * @param obj 待转换对象
     * @return 待转换对象
     * @name 转换成Integer
     * @description 描述
     * @time 创建时间:2015-10-19下午02:19:40
     * @author 邓文辉
     * @history 修订历史（历次修订内容、修订人、修订时间等）
     */
    public static Integer cast2Int(Object obj) {
        Integer returnVal = null;
        if (obj != null) {
            if (obj instanceof Integer) {
                returnVal = (Integer) obj;
            } else if (obj instanceof Long) {
                returnVal = ((Long) obj).intValue();
            } else if (obj instanceof Double) {
                returnVal = ((Double) obj).intValue();
            } else if (obj instanceof BigDecimal) {
                returnVal = ((BigDecimal) obj).intValue();
            } else if (obj instanceof String) {
                if (((String) obj).trim().length() == 0) {
                    returnVal = null;
                } else {
                    returnVal = Integer.parseInt((String) obj);
                }
            }
        }
        return returnVal;
    }


}
